package com.zhanghp.class031;

/**
 * 已知n是非负数
 * 返回大于等于n的最小的2某次方
 * 如果int范围内不存在这样的数，返回整数最小值
 *
 * @author zhanghp
 * @since 2024/4/8 15:24
 */
public class Code03_Near2power {
    /**
     * 原理：把高位的1移动，然后慢慢把其低位变成1，然后最后加个1，就得到答案
     *
     * @param n
     * @return
     */
    public static int near2power(int n) {
        if (n <= 0) {
            return 1;
        }
        // 防止2进制只有1个1的情况
        --n;
        // 正好移动31位处理
        n |= (n >>> 1);
        n |= (n >>> 2);
        n |= (n >>> 4);
        n |= (n >>> 8);
        n |= (n >>> 16);
        return n + 1;
    }

    public static void main(String[] args) {
        System.out.println(near2power(100));
    }
}
